package com.antdesignbackend.backend.form.certificateB.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.*;

import com.antdesignbackend.backend.activiti.constant.Constants;
import com.antdesignbackend.backend.config.WebConfig;
import com.antdesignbackend.backend.form.animalDaily.entity.AnimalDaily;
import org.springframework.ui.Model;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import com.antdesignbackend.backend.common.web.BaseController;
import com.antdesignbackend.backend.common.returnResult.ReturnVO;
import com.antdesignbackend.backend.aop.AuthToken;
import com.antdesignbackend.backend.form.certificateB.entity.CertificateB;
import com.antdesignbackend.backend.form.certificateB.entity.entityVo.CertificateBVo;
import com.antdesignbackend.backend.form.certificateB.service.CertificateBService;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 检疫证明(产品B)出证申请
 *
 * @author 林宇杰
 * @email certificateB
 * @date 2020-08-11 14:10:04
 */

@Controller
@RequestMapping("/certificateB")
@Slf4j
public class CertificateBController extends BaseController{

	private static final String FUN_NAME = "检疫证明(产品B)出证申请";//功能名称

	@Autowired
	private CertificateBService certificateBService;

	@GetMapping("/index")
	@AuthToken
	public String index(Model model) {
		model.addAttribute("userType",getUserType());
		return "form/certificateB/index";
	}


	@PostMapping("/tableSearch")
	@ResponseBody
	ReturnVO tableSearch(@RequestBody CertificateBVo certificateBVo) throws SecurityException, IllegalArgumentException{
		ReturnVO result=new ReturnVO();
		List<CertificateB> certificateBS=new ArrayList<>();
		QueryWrapper<CertificateB> wrapper =new QueryWrapper<>();
		System.out.println("时间区间为"+certificateBVo.getTimeInterval());
		if (certificateBVo.getTimeInterval() != null && !certificateBVo.getTimeInterval().equals("")){
			String[] str=certificateBVo.getTimeInterval().split(" - ");
			String star=str[0];
			String end=str[1];
			wrapper.between("saleTime",star,end);
		}
		if(!getUserType().equals("2")){
			wrapper.eq("eid",getLoginEnterpriseId());
		}
		wrapper.orderByDesc("saleTime").orderByDesc("createTime");
		//先统计满足条件的数据总数，因为sql 不包括排序
		int total=certificateBService.count(wrapper);
		result.setTotal(total);
		//再查询
		if(total>=0)
		{
			certificateBS=certificateBService.page(new Page<CertificateB>(certificateBVo.getPageIndex(),certificateBVo.getPageSize()),wrapper).getRecords();
			for(CertificateB certificateB:certificateBS){
				certificateB.setPhoto(WebConfig.host+"images/"+certificateB.getPhoto());
			}
		}
		result.setData(certificateBS);
		return result;
	}

	@GetMapping("/getById/{id}")
	@ResponseBody
	public	CertificateB getById(@PathVariable(name = "id") String id) {
		CertificateB obj = certificateBService.getById(id);
		return obj;
	}

	@PostMapping("/save")
	@ResponseBody
	public ReturnVO save(@RequestBody CertificateB certificateB){
		ReturnVO result = new ReturnVO();

//		certificateB.setTypes(Constants.PENDINGTRIAL);//审批中
		certificateB.setCreateBy(getLoginUserId());
		certificateB.setCreateTime(new Date());
		certificateB.setEid(getLoginEnterpriseId());
		try {
			certificateBService.save(certificateB);
		}catch (Exception e){
			result.setMessage("保存失败！");
			result.setCode("500");
		}
		return result;
	}

	@PostMapping("update")
	@ResponseBody
	public ReturnVO updateById(@RequestBody CertificateB certificateB){
		ReturnVO result = new ReturnVO();
//		certificateB.setTypes(Constants.PENDINGTRIAL);//审批中
		certificateB.setCreateBy(getLoginUserId());
		certificateB.setCreateTime(new Date());
		certificateB.setEid(getLoginEnterpriseId());
		try {
			certificateBService.updateById(certificateB);
		}catch (Exception e){
			result.setMessage("保存失败！");
			result.setCode("500");
		}
		return result;
	}

	/**
     * 根据id删除
     */
	@DeleteMapping("/deleteById/{id}")
	@ResponseBody
	public ReturnVO deleteById(@PathVariable Serializable id) {
		ReturnVO result = new ReturnVO();
		if (certificateBService.removeById(Integer.parseInt(id.toString())) == true) {
			result.setMessage("删除成功");
		} else {
			result.setMessage("删除失败");
			result.setCode("0");
		}
		return result;
	}
	/***
	 * 上传图片
	 * @return
	 */
	@PostMapping("/uploadImages")
	@ResponseBody
	public Map<String,String> uploadImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8") ;
		long random =System.currentTimeMillis();
		String dateKey =random+"";
		String localPathDir="";
		String newFileName="";
		Map<String,String> map = new HashMap<>();
		if(!WebConfig.uploadImage.equals(""))
		{
			localPathDir=WebConfig.uploadImage;
		}
		else
		{
			localPathDir= ResourceUtils.getURL("classpath:").getPath()+"images/";
		}
		File logoSaveFile = new File(localPathDir);
		if(!logoSaveFile.exists()){
			logoSaveFile.mkdirs();
		}
		if (request instanceof MultipartHttpServletRequest) {
			MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
			Iterator iter = mr.getFileMap().values().iterator();
			if (iter.hasNext()) {
				MultipartFile file = (MultipartFile) iter.next();
				String oname = file.getOriginalFilename();
				String fileTyle=oname.substring(oname.lastIndexOf("."),oname.length());
				fileTyle=fileTyle.toLowerCase();
				newFileName=dateKey+fileTyle;
				String fileName = localPathDir+newFileName;
				if(fileTyle.equals(".png") || fileTyle.equals(".gif") || fileTyle.equals(".jpg"))
				{
					File files = new File(fileName);
					InputStream inputstream =file.getInputStream();
					byte[] bytes = new byte[1024];
					FileOutputStream outstream = new FileOutputStream(fileName);
					int index;
					while ((index = inputstream.read(bytes)) != -1) {
						outstream.write(bytes, 0, index);
						outstream.flush();
					}
					outstream.close();
					inputstream.close();
				}
			}
		}
		if(newFileName!=null && !newFileName.equals(""))
		{
			map.put("url",newFileName);
			map.put("httpUrl",WebConfig.host+"images/"+newFileName);
		}
		// System.out.println("return:"+localPathDir+newFileName);
		return map;
	}
}


